package br.com.hd.controller;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

import br.com.hd.dao.DAO;
import br.com.hd.dao.ResponsavelDepartamentoDAO;
import br.com.hd.entity.Departamento;
import br.com.hd.entity.Responsavel;
import br.com.hd.entity.ResponsavelDepartamento;

public class ResponsavelDepartamentoController {

	private ResponsavelDepartamento responsavelDepartamento;
	private List<ResponsavelDepartamento> responsavelDepartamentoList = new ArrayList<ResponsavelDepartamento>();
	private List<SelectItem> departamentos = new ArrayList<SelectItem>();
	private List<SelectItem> responsaveis = new ArrayList<SelectItem>();

	public ResponsavelDepartamento getResponsavelDepartamento() {
		return responsavelDepartamento;
	}

	public void setResponsavelDepartamento(
			ResponsavelDepartamento responsavelDepartamento) {
		this.responsavelDepartamento = responsavelDepartamento;
	}

	public List<ResponsavelDepartamento> getResponsavelDepartamentoList() {
		return responsavelDepartamentoList;
	}

	public void setResponsavelDepartamentoList(
			List<ResponsavelDepartamento> responsavelDepartamentoList) {
		this.responsavelDepartamentoList = responsavelDepartamentoList;
	}

	public List<SelectItem> getDepartamentos() {
		return departamentos;
	}

	public void setDepartamentos(List<SelectItem> departamentos) {
		this.departamentos = departamentos;
	}

	public List<SelectItem> getResponsaveis() {
		return responsaveis;
	}

	public void setResponsaveis(List<SelectItem> responsaveis) {
		this.responsaveis = responsaveis;
	}


	public void cadastrar() throws IOException {
		responsavelDepartamento = new ResponsavelDepartamento();
		responsavelDepartamento.setDepartamento(new Departamento());
		responsavelDepartamento.setResponsavel(new Responsavel());
		listarDepartamentos();
		listarResponsaveis();
		FacesContext.getCurrentInstance().getExternalContext()
				.redirect("cadastrarResponsavelDepartamento.jsp");
	}

	public List<ResponsavelDepartamento> listar() throws IOException {
		responsavelDepartamentoList = new ArrayList<ResponsavelDepartamento>();
		responsavelDepartamentoList = ResponsavelDepartamentoDAO.getInstance()
				.buscarDepartamentos(responsavelDepartamento.getResponsavel());
		return responsavelDepartamentoList;
	}

	public void salvar() throws Exception {
		DAO.getInstance().save(responsavelDepartamento);
		responsavelDepartamento.setDepartamento(new Departamento());
		listar();
	}

	public ResponsavelDepartamento editar() throws IOException {
		listarDepartamentos();
		listarResponsaveis();
		FacesContext context = FacesContext.getCurrentInstance();
		responsavelDepartamento = (ResponsavelDepartamento) context
				.getExternalContext().getRequestMap().get("list");
		FacesContext.getCurrentInstance().getExternalContext()
				.redirect("cadastrarResponsavelDepartamento.jsp");
		return responsavelDepartamento;
	}

	@SuppressWarnings("unchecked")
	public List<SelectItem> listarDepartamentos() {
		departamentos = new ArrayList<SelectItem>();
		List<Departamento> departamentoList = new ArrayList<Departamento>();
		departamentoList = DAO.getInstance().list(Departamento.class);
		for (Departamento departamento : departamentoList) {
			departamentos.add(new SelectItem(departamento.getCodigo(),
					departamento.getDescricao()));
		}
		return departamentos;
	}

	@SuppressWarnings("unchecked")
	public List<SelectItem> listarResponsaveis() {
		responsaveis = new ArrayList<SelectItem>();
		List<Responsavel> responsavelList = new ArrayList<Responsavel>();
		responsavelList = DAO.getInstance().list(Responsavel.class);
		for (Responsavel responsavel : responsavelList) {
			responsaveis.add(new SelectItem(responsavel.getCodigo(),
					responsavel.getNome()));
		}
		return responsaveis;
	}
	
	
	public void excluir() throws IOException {
		DAO.getInstance().delete(responsavelDepartamento);
		listar();
		responsavelDepartamento.setDepartamento(new Departamento());
	}
}
